home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 30
/
Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso
/
Aminet
/
util
/
boot
/
Kickstop.lha
/
Kickstop
/
AmigavisionsLib
/
Error.a
< prev
next >
Wrap
Text File
|
1999-01-03
|
3KB
|
139 lines
********************************************************************************
*
* Program: Error
* Filename: Error.a
*
* Contents: Gibt einen Textstring mittlels DisplayAlert aus.
* Der Textstring wird automatisch im Wordwarp-Verfahren
* formatierrt. Ein $0a oder $0d-Byte markiert das Ende
* einer Zeile. Ein 0-Byte markiert das Ende des
* Textstrings.
* Inputs: a0.l Zeiger auf TextString (0= Unknown Soft-
* ware Error)
* Output: d0.b 01= linke, 00= rechte Maustaste gedrückt
*
* Language: 68000 Assembler
*
* Author: Johannes R. Geiss
*
* Copyright: Amigavisions
*
* History: $HISTORY:
* 2.2 (26-Oct-91) changed JRG
* 2.1 (19-Oct-91) changed JRG
* 2.0 (10-Oct-91) changed JRG
* 1.2 (10-Oct-91) changed JRG
* 1.1 (02-Jun-91) changed to linkable code JRG
* 1.0 (27-Jan-90) written JRG
*
* Version: $VER: Error.a 2.2 (26-Oct-91)
*
********************************************************************************
*------ Includes
include 'xref.i'
include 'call.i'
*------ Imports
XLIB AllocMem
XLIB FreeMem
XLIB DisplayAlert
XLIB DisplayBeep
xref _IntuitionBase
xref _SysBase
*------ Exports
xdef Error
********************************************************************************
SECTION Error
*------ Main procedure
*
* Input: a0.l Zeiger auf Text (0=Unknown Error)
*
* Output: d0.b 01=linke, 00=rechte Maustaste gedrückt
Error movem.l d2-d3/a4-a6,-(a7)
movea.l a0,a5 ; Zeiger auf TextString holen
cmpa.l #0,a5
bne.s ImpText ; Zeiger =0 ?
movea.l #FehlerText,a5 ; Eingenen Text holen
ImpText move.l #$7c8,d0 ; $7c8 Bytes Puffer holen
clr.l d1
CALLEXE AllocMem
move.l d0,TextBase
beq DeadEnd ; Kein Pufer bekommen
moveq.l #8,d2
moveq.l #2,d1
movea.l TextBase,a4 ; Zeiger auf Puffer
Loop4 addq.l #8,d2 ; Koordinaten justieren
cmpi.b #$c8,d2
beq.s Loop8 ; letzte Zeile erreicht
move.w #78,d0 ; max Textbreite
Loop2 addq.b #8,d1
clr.b (a4)+ ; Puffer initialisieren
move.b #$08,(a4)+
move.b d1,(a4)+
Loop5 move.b (a5)+,d3 ; Text in Puffer übertragen
bne.s Lab1
subq.l #1,a5
bra.s Loop6
Lab1 cmpi.b #$0a,d3
beq.s Loop6
cmpi.b #$0d,d3
beq.s Loop6
move.b d3,(a4)+
dbf d0,Loop5
Loop7 subq.l #1,a4
cmpi.b #$20,-(a5) ; =SPACE ? (Word-warp)
bne.s Loop7 ; nein
addq.l #1,a5
Loop6 clr.b (a4)+
tst.b (a5) ; Ende des Textes ?
beq.s Loop3 ; ja
move.b #$ff,(a4)+
bra.s Loop4 ; nächste Zeile
Loop8 subq.l #1,a4
Loop3 clr.b (a4)+ ; Ende-Markierung setzen
moveq.l #0,d0
movea.l TextBase,a0
move.l d2,d1
CALLITU DisplayAlert ; DisplayAlert
move.b d0,-(a7) ; Mousebuttonflag merken
movea.l TextBase,a1
move.l #$7c8,d0
CALLEXE FreeMem
move.b (a7)+,d0 ; Mousebuttonflag holen
Out movem.l (a7)+,d2-d3/a4-a6
rts
DeadEnd suba.l a0,a0 ; Keinen Puffer bekommen
CALLITU DisplayBeep
bra.s Out
********************************************************************************
section data,DATA
*------ Datafield
FehlerText
DC.B $0a
DC.B ' Unknown software failure! Press any mousebutton to continue.'
DC.B $0a,$0a,0
********************************************************************************
section data,BSS
*------ BSSfield
TextBase ds.l 1
END